from tipoRelacion import TipoRelacion, db_session
from sqlalchemy import exc
from flask import flash
session = db_session()

class TipoRelacionManager(object):
    """Clase encargada del manejo de tipo de relaciones entre items"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<TipoRelacion Manager>'
    
    def guardarTipoRelacion(self, tipoRelacion):
        """
        Metodo encargado de almacenar un tipo de relacion en la base de datos
        @param tipoRelacion: Objeto tipo de relacion que se desea guardar.
        """
        session.add(tipoRelacion)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El estado ya existe", "error")
        else:
            return flash("Estado de fase registrada exitosamente")
#        session.close()
        
    def eliminarTipoRelacion(self, idtiporelacion):
        """
        Metodo encargado de eliminar un tipo de relacion de la base de datos
        @param idtiporelacion: id del tipo de relacion que se desea eliminar.
        """
#        session = db_session()
        tipoRelacion = session.query(TipoRelacion).filter(TipoRelacion.idtiporelacion == idtiporelacion).first()
        session.delete(tipoRelacion)
        session.commit()
        
    def getTipoRelacion(self, idtiporelacion):
        """
        Metodo encargado de retornar tipo de relacion dado su idtipo
        @param idtiporelacion: id del tipo de relacion que se desea obtener.
        """
        tipoRelacion = session.query(TipoRelacion).filter(TipoRelacion.idtiporelacion == idtiporelacion).first()
        return tipoRelacion
    
    def getTipoRelaciones(self):
        """Metodo encargado de retornar todos los tipos de relacion"""
        tipoRelaciones = session.query(TipoRelacion)
        return tipoRelaciones
    
    def getTipoRelacionFiltradoPorNombre(self, nombre):
        """
        Metodo encargado de retornar un tipo de relacion dado su nombre
        @param nombre: nombre del tipo de relacion que se desea obtener.
        """
        if nombre == "":
            nombre = "%"
        else:
            nombre = "%" + nombre + "%"
        tipoRelacion = session.query(TipoRelacion).filter(TipoRelacion.nombre.like(nombre))
        return tipoRelacion
    
    def getTipoRelacionPorNombre(self, nombre):
        """
        Metodo encargado de retornar un tipo de relacion dado su nombre
        @param nombre: nombre del tipo de relacion que se desea obtener.
        """
        tipoRelacion = session.query(TipoRelacion).filter(TipoRelacion.nombre == nombre).first()
        return tipoRelacion
    